package com.campus.secondhand.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.campus.secondhand.common.Result;
import com.campus.secondhand.model.dto.PurchaseRequestCreateDTO;
import com.campus.secondhand.model.dto.PurchaseRequestStatusDTO;
import com.campus.secondhand.model.dto.PurchaseRequestUpdateDTO;
import com.campus.secondhand.model.vo.PurchaseRequestDetailVO;
import com.campus.secondhand.model.vo.PurchaseRequestVO;

/**
 * 求购信息服务接口
 */
public interface PurchaseRequestService {

        /**
         * 获取求购列表
         * 
         * @param minBudget     最小预算
         * @param maxBudget     最大预算
         * @param categories    分类列表
         * @param schoolId      学校ID
         * @param keyword       搜索关键词
         * @param pageable      分页参数
         * @param currentUserId 当前用户ID（可选，用于判断是否收藏）
         * @return 求购列表分页结果
         */
        Result<Page<PurchaseRequestVO>> getRequestList(Double minBudget, Double maxBudget, List<String> categories,
                        Long schoolId, String keyword, Pageable pageable, Long currentUserId);

        /**
         * 创建求购信息
         * 
         * @param userId                   用户ID
         * @param purchaseRequestCreateDTO 创建DTO
         * @return 创建结果
         */
        Result<?> createRequest(Long userId, PurchaseRequestCreateDTO purchaseRequestCreateDTO);

        /**
         * 获取求购详情
         * 
         * @param id 求购ID
         * @return 求购详情
         */
        Result<PurchaseRequestDetailVO> getRequestDetail(Long id);

        /**
         * 更新求购状态
         * 
         * @param id                       求购ID
         * @param userId                   用户ID
         * @param purchaseRequestStatusDTO 状态更新DTO
         * @return 更新结果
         */
        Result<?> updateRequestStatus(Long id, Long userId, PurchaseRequestStatusDTO purchaseRequestStatusDTO);

        /**
         * 删除求购信息
         * 
         * @param id     求购ID
         * @param userId 用户ID
         * @return 删除结果
         */
        Result<?> deleteRequest(Long id, Long userId);

        /**
         * 更新求购信息
         * 
         * @param id                       求购ID
         * @param userId                   用户ID
         * @param purchaseRequestUpdateDTO 更新DTO
         * @return 更新结果
         */
        Result<?> updateRequest(Long id, Long userId, PurchaseRequestUpdateDTO purchaseRequestUpdateDTO);

        /**
         * 增加浏览量
         * 
         * @param id 求购ID
         * @return 更新后的浏览量
         */
        Result<?> increaseViews(Long id);

        /**
         * 获取用户的求购列表
         * 
         * @param userId   用户ID
         * @param pageable 分页参数
         * @return 求购列表
         */
        Result<Page<PurchaseRequestVO>> getUserRequests(Long userId, Pageable pageable);

        /**
         * 联系发布者
         * 
         * @param id      求购ID
         * @param userId  联系人ID
         * @param message 联系消息
         * @return 操作结果
         */
        Result<?> contactPublisher(Long id, Long userId, String message);

        /**
         * 获取学校的求购列表
         * 
         * @param schoolId      学校ID
         * @param minBudget     最低预算
         * @param maxBudget     最高预算
         * @param category      分类
         * @param pageable      分页参数
         * @param currentUserId 当前用户ID（可选，用于判断是否收藏）
         * @return 学校求购列表
         */
        Result<Page<PurchaseRequestVO>> getSchoolRequests(
                        Long schoolId, Double minBudget, Double maxBudget, String category, Pageable pageable,
                        Long currentUserId);
}